#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:6031)

#include <stdio.h>

int Add(int a, int b)
{
	int sum = a ^ b;

	while (b != 0)
	{
		sum = a ^ b;
		b = (a & b) << 1;
		a = sum;
	}

	return sum;
}

int Neg(int b)
{
	return Add(~b, 1);
}

int Sub(int a, int b)
{
	return Add(a, Neg(b));
}

int Mul(int a, int b)
{
	int pro = 0;

	while (b != 0)
	{
		if ((b & 1) == 1)
		{
			pro = Add(a, pro);
		}

		a = a << 1;
		b = (unsigned int)b >> 1;
	}

	return pro;
}

int main()
{
	int a = 100;//2147483648
	int b = 1;
	int x = a;
	int y = b;
	int quo = 0;
	int i = 0;

	for (i=30; i>=0; i = Sub(i, 1))
	{
		if (((unsigned int)x >> i) >= y)
		{
			quo = Add(quo, 1 << i);
			x = Sub(x, Mul(y, 1 << i));
		}

	}

	printf("%d\n", quo);

	//printf("%d\n", 2 * 2147483648);

	return 0;
}

/*
a=1:
0000 0000 0000 0000 0000 0000 0000 0001
b=-1:
1000 0000 0000 0000 0000 0000 0000 0001
1111 1111 1111 1111 1111 1111 1111 1110
1111 1111 1111 1111 1111 1111 1111 1111
sum=-2
1111 1111 1111 1111 1111 1111 1111 1110
1000 0000 0000 0000 0000 0000 0000 0001
1000 0000 0000 0000 0000 0000 0000 0010
b=2
0000 0000 0000 0000 0000 0000 0000 0001
0000 0000 0000 0000 0000 0000 0000 0010				0000 0000 0000 0000 0000 0000 0000 0010
													1111 1111 1111 1111 1111 1111 1111 1110
a=-2:
1000 0000 0000 0000 0000 0000 0000 0010
1111 1111 1111 1111 1111 1111 1111 1101
1111 1111 1111 1111 1111 1111 1111 1110
sum = -3
1111 1111 1111 1111 1111 1111 1111 1101
1111 1111 1111 1111 1111 1111 1111 1100
1000 0000 0000 0000 0000 0000 0000 0011

&
0000 0000 0000 0000 0000 0000 0000 0100


*/

